<template>
  <div class="container-btn">
    <div class="base-use">
      <h2>基础用法</h2>
      <p>使用 type、plain、round 和 circle 来定义按钮的样式。</p>
      <el-row class="mb-4">
        <el-button
          v-for="button in buttons"
          :key="button.text"
          :type="button.type"
          >{{ button.text }}</el-button
        >
      </el-row>
      <br />
      <el-row class="mb-4">
        <el-button
          v-for="button in buttons"
          :key="button.text"
          :type="button.type"
          plain
          >{{ button.text }}</el-button
        >
      </el-row>
      <br />
      <el-row class="mb-4">
        <el-button
          v-for="button in buttons"
          :key="button.text"
          :type="button.type"
          round
          >{{ button.text }}</el-button
        >
      </el-row>
      <br />
      <el-row>
        <el-button :icon="Search" circle />
        <el-button type="primary" :icon="Edit" circle />
        <el-button type="success" :icon="Check" circle />
        <el-button type="info" :icon="Message" circle />
        <el-button type="warning" :icon="Star" circle />
        <el-button type="danger" :icon="Delete" circle />
      </el-row>
    </div>
    <hr />
    <div class="base-disabled">
      <h2>禁用状态</h2>
      <p>
        你可以使用 disabled 属性来定义按钮是否被禁用。 使用 disabled
        属性来控制按钮是否为禁用状态。 该属性接受一个 Boolean 类型的值。
      </p>
      <el-row class="mb-4">
        <el-button
          v-for="button in buttons"
          :key="button.text"
          :type="button.type"
          disabled
          >{{ button.text }}</el-button
        >
      </el-row>
      <br />
      <el-row>
        <el-button plain disabled>Plain</el-button>
        <el-button type="primary" plain disabled>Primary</el-button>
        <el-button type="success" plain disabled>Success</el-button>
        <el-button type="info" plain disabled>Info</el-button>
        <el-button type="warning" plain disabled>Warning</el-button>
        <el-button type="danger" plain disabled>Danger</el-button>
      </el-row>
    </div>
    <hr />
    <div class="base-link">
      <h2>链接按钮</h2>
      <p>Basic link button</p>
      <div class="flex justify-space-between mb-4 flex-wrap gap-4">
        <el-button
          v-for="button in buttons"
          :key="button.text"
          :type="button.type"
          link
          >{{ button.text }}</el-button
        >
      </div>

      <p>Disabled link button</p>
      <div class="flex justify-space-between flex-wrap gap-4">
        <el-button
          v-for="button in buttons"
          :key="button.text"
          :type="button.type"
          link
          disabled
          >{{ button.text }}</el-button
        >
      </div>
    </div>
    <hr />
    <div class="base-text">
      <h2>文字按钮</h2>
      <p>没有边框和背景色的按钮</p>
      <p>Basic text button</p>
      <div class="flex justify-space-between mb-4 flex-wrap gap-4">
        <el-button
          v-for="button in buttons"
          :key="button.text"
          :type="button.type"
          text
          >{{ button.text }}</el-button
        >
      </div>

      <p>Background color always on</p>
      <div class="flex justify-space-between mb-4 flex-wrap gap-4">
        <el-button
          v-for="button in buttons"
          :key="button.text"
          :type="button.type"
          text
          bg
          >{{ button.text }}</el-button
        >
      </div>

      <p>Disabled text button</p>
      <div class="flex justify-space-between flex-wrap gap-4">
        <el-button
          v-for="button in buttons"
          :key="button.text"
          :type="button.type"
          text
          disabled
          >{{ button.text }}</el-button
        >
      </div>
    </div>
    <hr />
    <div class="base-icon">
      <h2>图标按钮</h2>
      <p>
        使用图标为按钮添加更多的含义。
        你也可以单独使用图标不添加文字来节省显示区域占用。 使用 icon
        属性来为按钮添加图标。 您可以在我们的 Icon 组件中找到所需图标。
        通过向右方添加 i 标签来添加图标， 你也可以使用自定义图标。
      </p>
      <div class="flex">
        <el-button type="primary" :icon="Edit" />
        <el-button type="primary" :icon="Share" />
        <el-button type="primary" :icon="Delete" />
        <el-button type="primary" :icon="Search">Search</el-button>
        <el-button type="primary">
          Upload<el-icon class="el-icon--right"><Upload /></el-icon>
        </el-button>
      </div>
    </div>
    <hr />
    <div class="base-group">
      <h2>按钮组</h2>
      <p>
        以按钮组的方式出现，常用于多项类似操作。 使用 el-button-group
        对多个按钮分组。
      </p>
      <el-button-group>
        <el-button type="primary" :icon="ArrowLeft">Previous Page</el-button>
        <el-button type="primary">
          Next Page<el-icon class="el-icon--right"><ArrowRight /></el-icon>
        </el-button>
      </el-button-group>

      <el-button-group class="ml-4">
        <el-button type="primary" :icon="Edit" />
        <el-button type="primary" :icon="Share" />
        <el-button type="primary" :icon="Delete" />
      </el-button-group>
    </div>
    <hr />
    <div class="base-loading">
      <h2>加载状态按钮</h2>
      <p>
        点击按钮来加载数据，并向用户反馈加载状态。 通过设置 loading 属性为 true
        来显示加载中状态。
      </p>
      <el-button type="primary" loading>Loading</el-button>
      <el-button type="primary" :loading-icon="Eleme" loading
        >Loading</el-button
      >
      <el-button type="primary" loading>
        <template #loading>
          <div class="custom-loading">
            <svg class="circular" viewBox="-10, -10, 50, 50">
              <path
                class="path"
                d="
            M 30 15
            L 28 17
            M 25.61 25.61
            A 15 15, 0, 0, 1, 15 30
            A 15 15, 0, 1, 1, 27.99 7.5
            L 15 15
          "
                style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"
              />
            </svg>
          </div>
        </template>
        Loading
      </el-button>
    </div>
    <hr />
    <div class="base-size">
      <h2>调整尺寸</h2>
      <p>
        除了默认的大小，按钮组件还提供了几种额外的尺寸可供选择，以便适配不同的场景。
        使用 size 属性额外配置尺寸，可使用 large和small两种值。
      </p>
      <el-row>
        <el-button size="large">Large</el-button>
        <el-button>Default</el-button>
        <el-button size="small">Small</el-button>
        <el-button size="large" :icon="Search">Search</el-button>
        <el-button :icon="Search">Search</el-button>
        <el-button size="small" :icon="Search">Search</el-button>
      </el-row>
      <el-row class="my-4">
        <el-button size="large" round>Large</el-button>
        <el-button round>Default</el-button>
        <el-button size="small" round>Small</el-button>
        <el-button size="large" :icon="Search" round>Search</el-button>
        <el-button :icon="Search" round>Search</el-button>
        <el-button size="small" :icon="Search" round>Search</el-button>
      </el-row>
      <el-row>
        <el-button :icon="Search" size="large" circle />
        <el-button :icon="Search" circle />
        <el-button :icon="Search" size="small" circle />
      </el-row>
    </div>
    <hr />
    <div class="base-color">
      <h2>自定义颜色</h2>
      <div class="flex">
        <el-button color="#626aef">Default</el-button>
        <el-button color="#626aef" plain>Plain</el-button>

        <el-button color="#626aef" disabled>Disabled</el-button>
        <el-button color="#626aef" disabled plain>Disabled Plain</el-button>
      </div>
    </div>

    <el-backtop :bottom="100">
    <div
      style="
        height: 100%;
        width: 100%;
        background-color: var(--el-bg-color-overlay);
        box-shadow: var(--el-box-shadow-lighter);
        text-align: center;
        line-height: 40px;
        color: #1989fa;
      "
    >
      UP
    </div>
  </el-backtop>
  </div>
</template>

<script lang="ts" setup>
import {
  Check,
  Delete,
  Edit,
  Message,
  Search,
  Star,
  Share,
  ArrowLeft,
  Eleme,
} from "@element-plus/icons-vue";

const buttons = [
  { type: "", text: "defalut" },
  { type: "primary", text: "primary" },
  { type: "success", text: "success" },
  { type: "info", text: "info" },
  { type: "warning", text: "warning" },
  { type: "danger", text: "danger" },
] as const;
</script>

<style scoped>
.container-btn {
  padding: 20px;
}
.el-button .custom-loading .circular {
  margin-right: 6px;
  width: 18px;
  height: 18px;
  animation: loading-rotate 2s linear infinite;
}
.el-button .custom-loading .circular .path {
  animation: loading-dash 1.5s ease-in-out infinite;
  stroke-dasharray: 90, 150;
  stroke-dashoffset: 0;
  stroke-width: 2;
  stroke: var(--el-button-text-color);
  stroke-linecap: round;
}
</style>
